package system

import (
	"github.com/gin-gonic/gin"
	"liuche17.cn/go-blog/server/global"
	"liuche17.cn/go-blog/server/model/common/resp"
	"liuche17.cn/go-blog/server/model/system/req"
	sysResp "liuche17.cn/go-blog/server/model/system/resp"
)

type UserApi struct{}

type Msg struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

// Login 用户登录
func (*UserApi) Login(c *gin.Context) {
	var userLogin req.UserLogin
	err := c.ShouldBindJSON(&userLogin)
	if err != nil {
		resp.FailWithMessage(err.Error(), c)
	}
	// 校验密码长度 todo
	// 得到用户信息并验证
	token, err := userService.VerifyUser(userLogin)
	if err != nil {
		resp.FailWithMessage("用户名或密码错误", c)
		return
	}
	// 返回
	resMap := make(map[string]string)
	resMap["token"] = token
	resp.OkWithData(resMap, c)
}

// UpdatePassword 修改用户密码
func (s *UserApi) UpdatePassword(c *gin.Context) {
	var u req.UserUpdatePwd
	err := c.ShouldBindJSON(&u)
	if err != nil {
		resp.FailWithMessage(err.Error(), c)
		return
	}
	// 校验两个密码是否一样
	if u.Password != u.RePassword {
		resp.FailWithMessage("两次输入密码不一致", c)
		return
	}

	_ = userService.UpdateUserPwd(u.Password)
	resp.OkWithData("修改密码成功！", c)
}

// GetUserInfo 获取登录用户信息
func (s *UserApi) GetUserInfo(c *gin.Context) {
	userId := global.GB_USER.Id
	userInfo, err := userService.GetUserInfo(userId)
	if err != nil {
		resp.FailWithMessage(err.Error(), c)
		return
	}

	resp.OkWithData(sysResp.UserInfo{
		ID:       userInfo.ID,
		Username: userInfo.Username,
	}, c)
}
